from django.utils import timezone
from rest_framework.permissions import IsAdminUser
from rest_framework.views import APIView
from rest_framework.response import Response

# 定制日活用户的统计
from users.models import User

# 统计日活用户的数据量
class UserDayActiveView(APIView):
    # 1 该资源只允许管理员操作
    permission_classes = [IsAdminUser]
    # 2 定制数据统计逻辑(响应数据需要自己定制)
    # GET /meiduo_admin/statistical/day_active/
    def get(self,request):
        # 思路：根据当前的起始时间，与last_login的时间进行比较，最后 count 统计
        now_date = timezone.now().replace(hour=0,
                                          minute=0,
                                          second=0,
                                          microsecond=0)
        count = User.objects.filter(last_login__gte=now_date).count()
        # 构造响应数据
        response_data = {
            "count": count,
            "date": now_date.date()  # date的作用 获取 年-月-日 信息
        }
        return Response(response_data)


# 统计下单用户的数量
class UserDayOrdersView(APIView):
    # 1 该资源只允许管理员操作
    permission_classes = [IsAdminUser]
    # 2 定制数据统计逻辑(响应数据需要自己定制)
    # GET /meiduo_admin/statistical/day_orders/
    def get(self,request):
        # 思路：根据当前的起始时间，与last_login的时间进行比较，最后 count 统计
        now_date = timezone.now().replace(hour=0,
                                          minute=0,
                                          second=0,
                                          microsecond=0)
        count = User.objects.filter(orders__create_time__gte=now_date).distinct().count()
        # distinct() 是对数据进行去重
        # 构造响应数据
        response_data = {
            "count": count,
            "date": now_date.date()  # date的作用 获取 年-月-日 信息
        }
        return Response(response_data)

# 统计30天日增用户的数量
class UserMonthCountView(APIView):
    # 1 该资源只允许管理员操作
    permission_classes = [IsAdminUser]
    # 2 定制数据统计逻辑(响应数据需要自己定制)
    # GET /meiduo_admin/statistical/month_increment/
    def get(self,request):
        # 1 获取当前的时间，以及30天前的时间
        now_date = timezone.now().replace(hour=0, minute=0,
                                          second=0, microsecond=0)
        begin_date = now_date - timezone.timedelta(days=29)
        # 2 遍历30的统计数据
        current_date = begin_date
        methon_list = []

        # 2-1 30天的遍历
        while current_date <= now_date:
            next_date = current_date + timezone.timedelta(days=1)
            # 获取两个0点间的所有新增用户
            count = User.objects.filter(date_joined__gte=current_date,
                                        date_joined__lt=next_date).count()
            methon_list.append({
                "count": count,
                "date": current_date.date()  # date的作用 获取 年-月-日 信息
            })
            current_date += timezone.timedelta(days=1)

        return Response(methon_list)
